define(function(require, exports, module) {

	var moment = require('moment'),
	    $ = require('$');

	module.exports = function (params) {
        
        var datepicker = this;

        datepicker.version = '0.0.1';

        datepicker.params = {
        	template: require('tpl/datepicker.html'),
        	init: true
        };

        // Extend defaults with parameters
        for (var param in params) {
            datepicker.params[param] = params[param];
        }

        datepicker.isInited = false;

        datepicker.get = function(container) { //YYYY-MM-DDTHH:mm
        	container = $(container);
    		var datetime = '';
    		datetime += container.find('.year .value').text() + '-';
    		datetime += container.find('.month .value').text() + '-';
    		datetime += container.find('.date .value').text() + 'T';
    		datetime += container.find('.hour .value').text() + ':';
    		datetime += container.find('.minute .value').text();
    		return datetime;
        }

        datepicker.set = function(moment, container) {
        	container = $(container);
    		container.find('.year .value').text(moment.format('YYYY'));
    		container.find('.month .value').text(moment.format('MM'));
    		container.find('.date .value').text(moment.format('DD'));
    		container.find('.hour .value').text(moment.format('HH'));
    		container.find('.minute .value').text(moment.format('mm'));
        }

        datepicker.init = function() {
        	if(datepicker.isInited) return;

        	var containers = $('[data-role=datepicker]');

        	$('[data-role=datepicker]').each(function() {
        		var self = $(this),
        		    input = self.find('input'),
        		    container = self.find('.datepicker-container');

        		input.css({display:'none'});

        		if(container.length <= 0) {
        			container = $('<div class="datepicker-container"></div>');
        			self.append(container);
        		}

        		container.html(datepicker.params.template);

        		var datetime = moment(input.val(), 'YYYY-MM-DDTHH:mm');

        		datepicker.set(datetime, container);

        		container.find('.date-item').each(function(){

        			var dateItem = $(this);

        			$(this).find('span').first().on('click', function(e){
        				
        				if(dateItem.hasClass('year')) {
        					datetime.add(1, 'y');
        				}
        				else if(dateItem.hasClass('month')) {
        					datetime.add(1, 'M');
        				}
        				else if(dateItem.hasClass('date')) {
        					datetime.add(1, 'd');
        				}
        				else if(dateItem.hasClass('hour')) {
        					datetime.add(1, 'h');
        				}
        				else if(dateItem.hasClass('minute')) {
        					datetime.add(1, 'm');
        				}

        				datepicker.set(datetime, container);

        				input.val( datepicker.get(container) );
        			});

        			$(this).find('span').last().on('click', function(e){

        				if(dateItem.hasClass('year')) {
        					datetime.add(-1, 'y');
        				}
        				else if(dateItem.hasClass('month')) {
        					datetime.add(-1, 'M');
        				}
        				else if(dateItem.hasClass('date')) {
        					datetime.add(-1, 'd');
        				}
        				else if(dateItem.hasClass('hour')) {
        					datetime.add(-1, 'h');
        				}
        				else if(dateItem.hasClass('minute')) {
        					datetime.add(-1, 'm');
        				}

        				datepicker.set(datetime, container);

        				input.val( datepicker.get(container) );
        			});
        		});
        	});

        	datepicker.isInited = true;
        	
        };

        if(datepicker.params.init) datepicker.init();

        return datepicker;
        
    };  
});